package com.gofaraway.service.student.base;

import lombok.Data;
import org.apache.commons.collections4.CollectionUtils;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author ChenPeng
 * @Date 2024/8/19 21:31
 */
public class TestService {

    @Data
    public class TagDTO {
        public Integer tagId;
        public String tagName;
        // 情感值，1=正向，0=中性，-1=负向
        public Integer affection;
    }

    /**
     * 目标: 输入一个标签列表，长度大于10，进行以下操作：
     * 1、按标签情感值倒序排列，优先展示正向标签，其次展示中性标签，最后展示负向标签。
     * 2、如果前六个标签词均为正向标签，则将排序最靠前的负向标签提权到第六位展示，原本第六位及之后的词顺延至下一位展示。
     * 3、返回排序后标签列表。
     */
    public List<TagDTO> tagOrder(List<TagDTO> tagList) {
        if (tagList == null || tagList.size() <= 10) {
            return tagList;
        }

        //按标签情感值倒序排列
        List<TagDTO> sortedTags = tagList.stream()
                .sorted(Comparator.comparingInt(TagDTO::getAffection).reversed())
                .collect(Collectors.toList());

        //如果前六个标签词均为正向标签，将排序最靠前的负向标签提前到第六位展示
        if (sortedTags.stream().limit(6).allMatch(tag -> tag.getAffection() == 1)) {
            TagDTO negativeTag = sortedTags.stream()
                    .filter(tag -> tag.getAffection() == -1)
                    .findFirst()
                    .orElse(null);

            if (negativeTag != null) {
                sortedTags.remove(negativeTag);
                sortedTags.add(5, negativeTag);
            }
        }

        return sortedTags;
    }
}
